package com.yuan.gather.repository;

import com.yuan.gather.entity.GatherPlan;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 采集计划数据访问接口
 *
 * @author zhaoff
 */
public interface GatherPlanRepository extends PagingAndSortingRepository<GatherPlan, Long>,
        JpaSpecificationExecutor<GatherPlan> {

    /**
     * 根据采集计划名称查询
     *
     * @param name 计划名称
     * @return 列表
     */
    //List<GatherPlan> findByName(String name);

    /**
     * 根据执行状态查询
     *
     * @param state 执行状态
     * @return 列表
     */
    List<GatherPlan> findByState(int state);

    /**
     * 根据执行状态列表查询
     *
     * @param states 执行状态列表
     * @return 列表
     */
    List<GatherPlan> findByStateIn(List<Integer> states);

    /**
     * 更新计划状态
     *
     * @param ids   计划id集合
     * @param state 状态
     */
    @Modifying
    @Transactional
    @Query(value = "update tbl_gather_plan set state=?2 where id in ?1", nativeQuery = true)
    void updateState(List<Long> ids, int state);

    /**
     * 查询关联资产数组不为空
     *
     * @return 结果
     */
    @Query(value = "select * from tbl_gather_plan where array_length(dev_ids,1) is not null", nativeQuery = true)
    List<GatherPlan> getDevIdsNotEmpty();

}
